﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CAGFIP.DataAccess.DataSetTableAdapters;
using CAGFIP.DataAccess;
using CAGFIP.Utils;
using System.Windows.Forms;

namespace CAGFIP.Edicao
{
    public class ControladorEdicao
    {
        #region Singleton

        private static ControladorEdicao instance;

        private ControladorEdicao() { }

        public static ControladorEdicao Instance
        {
            get { return instance ?? (instance = new ControladorEdicao()); }
        }

        #endregion

        #region Properties

        public static IAssuntoDAO AssuntoDAO
        {
            get
            {
                if (Constants.IsDebug)
                    return AssuntoDAODebug.Instance;
                else
                    return CAGFIP.Edicao.AssuntoDAO.Instance;
            }
        }

        public static IPerguntaDAO PerguntaDAO
        {
            get
            {
                if (Constants.IsDebug)
                    return PerguntaDAODebug.Instance;
                else
                    return CAGFIP.Edicao.PerguntaDAO.Instance;
            }
        }

        #endregion

        #region Methods

        public void ObterDados(out List<Pergunta> perguntas,
            out List<Assunto> assuntos)
        {
            perguntas = PerguntaDAO.VisualizarPerguntas();
            assuntos = AssuntoDAO.VisualizarAssuntos();
        }

        public void OnAutenticacaoOk(DataGridView perguntaView, DataGridView assuntoView)
        {
            perguntaView.DataSource = PerguntaDAO.VisualizarPerguntaDataSet();
            assuntoView.DataSource = AssuntoDAO.VisualizarAssuntoDataSet();
            //ExibirManipulacao(perguntas, assuntos);
            //if (perguntas == null) ExibirMensagemErro(ErroEnum.CRUDSemPerguntas);
            //if (assuntos == null) ExibirMensagemErro(ErroEnum.CRUDSemAssuntos);
        }

        public void OnSalvarPerguntaConfirmado(Pergunta novaPergunta)
        {
            if (novaPergunta.Id == -1)
            {
                PerguntaDAO.CadastrarPergunta(novaPergunta);
            }
            else
            {
                PerguntaDAO.AlterarPergunta(novaPergunta);
            }
        }

        public void OnSalvarAssuntoConfirmado(Assunto novoAssunto)
        {
            if (novoAssunto.Id == -1)
            {
                AssuntoDAO.CadastrarAssunto(novoAssunto);
            }
            else
            {
                AssuntoDAO.AlterarAssunto(novoAssunto);
            }
        }

        public void OnRemoverPerguntaConfirmado(int idPergunta)
        {
            PerguntaDAO.RemoverPergunta(idPergunta);
        }

        public void OnRemoverAssuntoConfirmado(int idAssunto)
        {
            AssuntoDAO.RemoverAssunto(idAssunto);
        }

        #endregion
    }
}
